package controller;

import DAO.DAOFactory;
import entidade.Exercicio;
import entidade.ExercicioTreino;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Thais
 */
@ManagedBean
@ViewScoped
public class ExercicioController implements Serializable {

    private Exercicio exercicio;
    private String grupoMuscular;
    private String descricao;
    private ExercicioDataModel exercicioDM;
    private Exercicio exercicioSelecionado;
    private List<ExercicioTreino> exercicioList;
    private ExercicioTreino dadosExercicio;
    private TreinoDataModel exercicioTreinoDM;
    private List<Exercicio> exercicios;
    private String cabecalhoMsg;
    private String mensagem;
    private boolean deuCerto;
    private Exercicio exerc;

    public ExercicioController() {
        dadosExercicio = new ExercicioTreino();
        exercicioList = new ArrayList<ExercicioTreino>();
        exercicio = new Exercicio();
    }

    public Exercicio getExercicio() {
        return exercicio;
    }

    public void setExercicio(Exercicio exercicio) {
        this.exercicio = exercicio;
    }

    public String getGrupoMuscular() {
        return grupoMuscular;
    }

    public void setGrupoMuscular(String grupoMuscular) {
        this.grupoMuscular = grupoMuscular;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public ExercicioDataModel getExercicioDM() {
        return exercicioDM;
    }

    public Exercicio getExercicioSelecionado() {
        return exercicioSelecionado;
    }

    public void setExercicioSelecionado(Exercicio exercicioSelecionado) {
        this.exercicioSelecionado = exercicioSelecionado;
    }

    public List<ExercicioTreino> getExercicioList() {
        return exercicioList;
    }

    public void setExercicioList(List<ExercicioTreino> exercicioList) {
        this.exercicioList = exercicioList;
    }

    public ExercicioTreino getDadosExercicio() {
        return dadosExercicio;
    }

    public void setDadosExercicio(ExercicioTreino dadosExercicio) {
        this.dadosExercicio = dadosExercicio;
    }

    public TreinoDataModel getExercicioTreinoDM() {
        return exercicioTreinoDM;
    }

    public String getCabecalhoMsg() {
        return cabecalhoMsg;
    }

    public void setCabecalhoMsg(String cabecalhoMsg) {
        this.cabecalhoMsg = cabecalhoMsg;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public void pesquisarExercicio() {
        exercicios = DAOFactory.obterExercicioDAO().buscarPorGrupoMuscular(grupoMuscular);
        exercicioDM = new ExercicioDataModel(exercicios);
        System.out.println(exercicios);
    }

    public void onRowSelect(SelectEvent event) {
        dadosExercicio = new ExercicioTreino();
        exercicioSelecionado = (Exercicio) event.getObject();
        dadosExercicio.setExercicio(exercicioSelecionado);
    }

    public void onRowSelectExercicio(SelectEvent event) {
        exercicioSelecionado = (Exercicio) event.getObject();
    }

    public void salvarDados() {
        exercicioList.add(dadosExercicio);
        dadosExercicio = new ExercicioTreino();
    }

    public void incluirDados() {
        exercicioTreinoDM = new TreinoDataModel(exercicioList);
    }

    public void excluirExercicio() {
        deuCerto = DAOFactory.obterExercicioDAO().excluirExercicio(exercicioSelecionado);

        if (deuCerto) {
            exercicios.remove(exercicioSelecionado);
            mensagem = "Exercício excluído!";
        } else {
            mensagem = "Erro ao excluir exercício!";
        }

        cabecalhoMsg = "Exercício";
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("PF('exercicioDialog').show()");
    }

    public void limparCampos() {
        exercicio = new Exercicio();
        descricao = null;
    }

    public void salvarExercicio() {
        exerc = null;
        String tela = FacesContext.getCurrentInstance().getViewRoot().getViewId();
        if ("/Telas/criarExercicio.xhtml".equalsIgnoreCase(tela)) {
            exerc = DAOFactory.obterExercicioDAO().buscarPorNome(exercicio.getNome());
        }
        if (exercicio.getNome() != null && !("".equals(exercicio.getNome()))) {

//            exerc = DAOFactory.obterExercicioDAO().buscarPorNome(exercicio.getNome());
            if (exerc == null) {
                deuCerto = DAOFactory.obterExercicioDAO().salvarExercicio(exercicio);
                if (deuCerto) {
                    mensagem = "Exercicio salvo com sucesso!";
                } else {
                    mensagem = "Erro ao salvar exercicio!";
                }

                cabecalhoMsg = "Exercicio";
                RequestContext context = RequestContext.getCurrentInstance();
                context.execute("PF('exercicioDialog').show()");
                exercicio = new Exercicio();
            } else {
                mensagem = "Exercicio já existe!";
                cabecalhoMsg = "Exercicio";
                RequestContext context = RequestContext.getCurrentInstance();
                context.execute("PF('exercicioDialog').show()");
                exercicio = new Exercicio();
            }
        } else {
            mensagem = "Informe um nome para o exercicio!";
            cabecalhoMsg = "Exercicio";
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('exercicioDialog').show()");
            exercicio = new Exercicio();
        }
    }

    @PostConstruct
    public void carregarDados() {
        String tela = FacesContext.getCurrentInstance().getViewRoot().getViewId();

        if (("/Telas/alterarExercicio.xhtml".equalsIgnoreCase(tela))) {
            HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
            HttpSession session = req.getSession();
            exercicio = (Exercicio) session.getAttribute("exercicioSelecionado");
        }
    }

    public String alterarExercicio() {
        if (exercicioSelecionado == null) {
            FacesMessage msg = new FacesMessage("Exercicio não selecionado!");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } else {
            FacesContext fc = FacesContext.getCurrentInstance();
            HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
            session.setAttribute("exercicioSelecionado", exercicioSelecionado);
            return "/Telas/alterarExercicio";
        }
        return null;
    }
}
